//***************************************************
// A Digit's Widget - Zbrush Zscript
// Animation Widget
// 3D Animation Functions
// Version 3.2 - 09/15/01 * Fixed Frame Problem
// Added automatic filename for Export Frame Function
// Added Brush Stroke Movement
// Added Swap Start-End to smoothly add to existing animation
// Added Sun animation
// I guess this is done - no more variable space!
//	Version 3.1 - 09/15/01 - Updated with Advanced and Standard Animation Scripts
//***************************************************
//Document stuff
[VarSet,docWidth,DOCUMENT:MODIFIERS:WIDTH]
[VarSet,docHeight,DOCUMENT:MODIFIERS:HEIGHT]
[VarSet,docMidX,docWidth/2]
[VarSet,docMidY,docHeight/2]
//Widget's Stuff
[varDef,ICurrX,0]
[varDef,ICurrY,0]
[varDef,ICurrZ,0]
[varDef,ICurrXS,0]
[varDef,ICurrYS,0]
[varDef,ICurrZS,0]
[varDef,CurrXR,0]
[varDef,CurrYR,0]
[varDef,CurrZR,0]
//****************************
//Position Mark Common
//****************************
[VarDef,maxAvailablemarks,10] 
[VarDef,MarkTool(maxAvailablemarks+1),0]
[VarDef,MarkMat(maxAvailablemarks+1),0]
[VarDef,MarkR(maxAvailablemarks+1),0]
[VarDef,MarkG(maxAvailablemarks+1),0]
[VarDef,MarkB(maxAvailablemarks+1),0]
[varDef,MarkX(maxAvailablemarks+1)]  
[varDef,MarkY(maxAvailablemarks+1)]  
[varDef,MarkZ(maxAvailablemarks+1)]  
[varDef,MarkXS(maxAvailablemarks+1)]  
[varDef,MarkYS(maxAvailablemarks+1)]  
[varDef,MarkZS(maxAvailablemarks+1)]  
[varDef,MarkXR(maxAvailablemarks+1)]  
[varDef,MarkYR(maxAvailablemarks+1)]  
[varDef,MarkZR(maxAvailablemarks+1)]  
[varDef,MarkIndex,1]
//****************************
//Pointer Common
//****************************
[VarDef,curmX]
[VarDef,curmY]
[VarDef,curmZ]
[VarDef,Xangle,0]
[VarDef,Yangle,0]
[VarDef,kx,0]
[VarDef,ky,0]
[VarDef,kz,0]
[VarDef,pkx,0]
[VarDef,pky,0]
[VarDef,pkz,0]
//****************************
//moveto common
//****************************
[VarDef,sel1,1]
[VarDef,sel2,2]
[VarDef,middlex,0]
[VarDef,middley,0]
[VarDef,middlez,0]
//****************************
//mousecommon
//****************************
[varDef,Hval1,320]
[varDef,Vval1,258]
[varDef,Hval2,320]
[varDef,Vval2,258]
[varDef,Zval1,0]
[varDef,Zval2,0]
[varDef,Ldiam,10]

//***************************************************
// Widget_Layer Include File
// Layer Manipulation Script
//***************************************************
[varDef,Lvmove,0]
[varDef,Lhmove,0]
[varDef,Lzmove,0]
[FontSetColor,255,200,0]Layer Control...[FontSetColor,160,160,160]
//**************************************************************************
//********************Layer Control ****************************************
//**************************************************************************
[iSlider,"LayerH  ",0,1,-DocWidth,DocWidth,"Layer Horiz", 	[varSet,Lhmove,zscript:LayerH],0,[TextCalcWidth,MaxZdepth123456]]
[iSlider,"LayerV  ",0,1,-DocWidth,DocWidth,"Layer Vert",	[varSet,Lvmove,zscript:LayerV],0,[TextCalcWidth,MaxZdepth123456]]
[iSlider,"LayerZ  ",0,1,-5000,5000,"Layer Zdepth",		[varSet,Lzmove,zscript:LayerZ],0,[TextCalcWidth,MaxZdepth123456]]

[iButton," LayerMove ","Move Layer Coords",
	[
, Layer:Modifiers:DisplaceH,Lhmove]
	[ISet, Layer:Modifiers:DisplaceV,Lvmove]
	[ISet, Layer:Modifiers:DisplaceZ,Lzmove]
] //end of LayerMove
[PD]
//***************************************************
// Digit's Widgets - A Zbrush Zscript
// Widget_Zdepth 
// Calculate Size according to ZDepth Area and ZReference  
//********************************************************
[FontSetColor,255,200,0]ZDepth Area Size[FontSetColor,160,160,160]
//Automatically set size of object according to depth. Size drawn will become size determined from Reference point
//Set defaults so that user doesn't get an error if he forgets to set it
[VarDef,ZArea,500]
[VarDef,RefX,DocMidX]
[VarDef,RefY,DocMidY]
[VarDef,RefZ,0]
[VarDef,RefXS,20]
[VarDef,RefYS,20]
[VarDef,RefZS,20]
[VarDef,RefMult,.5]
[VarDef,Zfactor,0]
[VarDef,ZDmult,1]
[iSlider,"MaxZdepth   ",500,.1,0,4000,"Zdepth Cube Setting",[varSet,ZArea,zscript:MaxZdepth],0,[TextCalcWidth,MaxZdepth12345678]]
[iSlider,"ZDepthMult  ",1,.1,1,100,"Zdepth Muliplier Setting",[varSet,ZDmult,zscript:ZDepthMult],0,[TextCalcWidth,MaxZdepth12345678]]
[iButton," RefObject ","Grab Reference according to MaxZDepth",
	[TransformGet,RefX,RefY,RefZ,RefXS,RefYS,RefZS]
	[VarSet,Zfactor,ZArea-RefZ]
	[if,Zfactor<1,[VarSet,Zfactor,1]]
	[VarSet,TotalArea,ZArea*2]
	[VarSet,RefMult,Zfactor/TotalArea]
]
[iButton," SizeObject ","Size Object according to MaxZDepth",
	//go ahead and get all of the current data 
	[TransformGet,IcurrX,IcurrY,IcurrZ,IcurrXS,IcurrYS,IcurrZS]
	[RoutineCall,DepthCalc]
]//end SizeObject
//***************************************************
// Digit's Widgets - A Zbrush Zscript
// Widget_NosePointer by Davey
// Point Nose of 3D object to any point in space
// Origin Point entered here will be used by other functions  
//********************************************************

[PD]
[FontSetColor,255,200,0]Nose Pointer....[FontSetColor,160,160,160]

[iSlider,"X Center",docWidth/2,.1,-4096,4096,"X Component",,,120]
[iSlider,"Y Center",docHeight/2,.1,-4096,4096,"Y Component",,,120]
[iSlider,"Z Center",0,.1,-4096,4096,"Z Component",,,120]
[iButton,"Use Current","Put current object's position into these sliders",
	[transformGet,curmX,curmY,curmZ]
	[iSet,zscript:xcenter,curmX]
	[iSet,zscript:ycenter,curmY]
	[iSet,zscript:zcenter,curmZ]
,,] // end iButton

[iButton,"Point","Point current 3D object toward the center indicated above",
	[if,[isDisabled,transform:move],
		[messageOK,"Most recently-drawn item must be a 3D object in a Transform or Edit mode"]
	, // else
	[transformGet,ICurrX,ICurrY,ICurrZ,ICurrXS,ICurrYS,ICurrZS,CurrXR,CurrYR,CurrZR]
	[varSet,curmX,[iGet,zscript:xcenter]]
	[varSet,curmY,[iGet,zscript:ycenter]]
	[varSet,curmZ,[iGet,zscript:zcenter]]
	[routineCall,PointFromTo,ICurrX,ICurrY,ICurrZ,curmX,curmY,curmZ,Xangle,Yangle]
	[transformSet,,,,,,,Xangle,Yangle,CurrZR]
	]
,,] // end iButton
[PD]
//***************************************************
// Widget_Marker_Main - Include File
// Master Marker Include
//**************************************************************************
//********************Position Marks****************************************
//**************************************************************************
[varDef,MZ,0]
[varDef,MY,0]
[varDef,MZ,0]
[varDef,M1,0]
[varDef,M2,0]
[varDef,M3,0]
[FontSetColor,255,200,0]Position Marks..[FontSetColor,160,160,160]

[iSlider,"SelectMark",1,1,1,10,"Select Mark Index",
	[varSet,MarkIndex,zscript:SelectMark]
	[Note,"Selecting Mark...",,-1]
	[Note,MarkIndex,,1]
,0,[TextCalcWidth,SelectMark123]]
[iButton,"M+ ","Increment Mark",
	[VarInc,MarkIndex]
	[if, MarkIndex>10,[VarSet,MarkIndex,1]]
	[ISet,zscript:SelectMark,MarkIndex]
,0,0,.]
[iButton,"M- ","Decrement Mark",
	[VarDec,MarkIndex]
	[if, MarkIndex<1,[VarSet,MarkIndex,10]]
	[ISet,zscript:SelectMark,MarkIndex]
]
[iButton," Save ","Save Current Object Mark",
	[VarSet,MarkIndex,[IGet,zscript:SelectMark]]
	[note,"Saving....",,-1]
	[Note,MarkIndex,,1]
	[TransformGet,MarkX(MarkIndex),MarkY(MarkIndex),MarkZ(MarkIndex),MarkXS(MarkIndex),MarkYS(MarkIndex),MarkZS(MarkIndex),MarkXR(MarkIndex),MarkYR(MarkIndex),MarkZR(MarkIndex)]
	//Gather pertinent info about the object
	[VarSet,MarkTool(MarkIndex),[IGet,TOOL:iteminfo]]
	[VarSet,MarkMat(MarkIndex),[IGet,MATERIAL:iteminfo]]
	[VarSet,MarkR(MarkIndex),[IGet,Color:Redcomponent]]
	[VarSet,MarkG(MarkIndex),[IGet,Color:Greencomponent]]
	[VarSet,MarkB(MarkIndex),[IGet,Color:Bluecomponent]]
,,,CTRL+'m'
]
[iButton," Load ","Load Current Object Mark",
	[Note,"Loading...",,-1]
	[Note,MarkIndex,,1]
	[RoutineCall,LoadMark,MarkIndex]
]
[RoutineDef,LoadMark,
	[VarDef,newchk,0]
	[VarDef,isold,0]
	[VarSet,newchk,0]	
	[if,[IGet,Transform:DrawPointer] == 1,[VarSet,isold,1],[VarSet,isold,0]]

	[ISet,zscript:SelectMark,imptr]
	[VarSet,MX,MarkX(imptr)]
	[VarSet,MY,MarkY(imptr)]
	[VarSet,MZ,MarkZ(imptr)]
	[VarSet,newchk,MX+MY+MZ]
	//check to see if a new marker
	//if user isn't holding an object make the original
	[if,isold == 1,
		[if,newchk <> 0,
			[ISet,Tool:ItemInfo,MarkTool(imptr)]
			[CanvasClick,MX,MY,MX+10,MY+10]
			[ISet,Transform:Move,1]
			[ISet,Material:ItemInfo,MarkMat(imptr)]
			[IColorSet,MarkR(MarkIndex),MarkG(imptr),MarkB(imptr)]
		]
	]
	[if,newchk <> 0,
		[if,isold == 1,
			[TransformSet,MX,MY,MZ,MarkXS(imptr),MarkYS(imptr),MarkZS(imptr),MarkXR(imptr),MarkYR(imptr),MarkZR(imptr)]
		,//else
			[TransformSet,MX,MY,MZ]
		]
	,//else
		[Note,"New Marker...",,-1]
		[note,MarkIndex,,1]
	]
//parameter
,imptr]
[iButton,"M1","Load Current Object Mark",
	[ISet,zscript:SelectMark,1]
,,,SHIFT+'1'
]
[iButton,"M2","Load Current Object Mark",
	[ISet,zscript:SelectMark,2]
,,,SHIFT+'2'
]
[iButton,"M3","Load Current Object Mark",
	[ISet,zscript:SelectMark,3]
,,,SHIFT+'3'
]
[iButton,"M4","Load Current Object Mark",
	[ISet,zscript:SelectMark,4]
,,,SHIFT+'4'
]
[iButton,"M5","Load Current Object Mark",
	[ISet,zscript:SelectMark,5]
,,,SHIFT+'5'
]
[iButton,"M6","Load Current Object Mark",
	[ISet,zscript:SelectMark,6]
,,,SHIFT+'6'
]
[iButton,"M7","Load Current Object Mark",
	[ISet,zscript:SelectMark,7]
,,,SHIFT+'7'
]
[iButton,"M8","Load Current Object Mark",
	[ISet,zscript:SelectMark,8]
,,,SHIFT+'8'
]
[iButton,"M9","Load Current Object Mark",
	[ISet,zscript:SelectMark,9]
,,,SHIFT+'9'
]
[iButton,"M10","Load Current Object Mark",
	[ISet,zscript:SelectMark,10]
,,,SHIFT+'0'
]
[PD]

//****************************************************
// Digit Widget - Animation Advanced
//****************************************************
[PaintPageBreak]
[PD]
[FontSetColor,255,200,0]Animation Functions[FontSetColor,160,160,160]
[PD]
[VarDef,ptr,0]
[VarDef,doSave,0]
[VarDef,Look,0]
//object data
[VarDef,type(5)]
[VarDef,Active(5)]
[VarDef,mat(5)]
[VarDef,mode(5)]
[VarDef,BStroke(5)]
[VarDef,bnumpts(5)]
[VarDef,PTarg(5)]
[VarDef,SZDepth,0]
[VarDef,EZDepth,0]
[VarDef,px(5)]
[VarDef,py(5)]
[VarDef,pz(5)]
[VarDef,pxs(5)]
[VarDef,pys(5)]
[VarDef,pzs(5)]
[VarDef,pxr(5)]
[VarDef,pyr(5)]
[VarDef,pzr(5)]
[VarDef,epx(5)]
[VarDef,epy(5)]
[VarDef,epz(5)]
[VarDef,epxs(5)]
[VarDef,epys(5)]
[VarDef,epzs(5)]
[VarDef,epxr(5)]
[VarDef,epyr(5)]
[VarDef,epzr(5)]
[VarDef,pr(5)]
[VarDef,pg(5)]
[VarDef,pb(5)]
[VarDef,TimeLine(5),10]
[VarDef,FrameOffset(5),0]
[VarDef,timeincr,0]
[VarDef,crecurse,0]
[VarSet,initialyDisabled,0]
[VarSet,dummy,0]
[VarDef,RepeatCount,10]
[VarDef,resultx(5),0]
[VarDef,resulty(5),0]
[VarDef,resultz(5),0]
[VarDef,resultxs,0]
[VarDef,resultys,0]
[VarDef,resultzs,0]
[VarDef,resultxr,0]
[VarDef,resultyr,0]
[VarDef,resultzr,0]
[VarDef,kpx(5)]
[VarDef,kpy(5)]
[VarDef,kpz(5)]
[VarDef,which,0]
[VarDef,Frame,0]
[VarDef,Pick,-1]
[VarDef,SwapTmp,0]
[VarDef,PointStroke,0]
[VarDef,pnumpts,0]
//***************************
//Curve Point
//***************************
[VarDef,pointX(5)]
[VarDef,pointY(5)]
[VarDef,pointZ(5)]
[VarDef,pointXS(5)]
[VarDef,pointYS(5)]
[VarDef,pointZS(5)]
[VarDef,pointXR(5)]
[VarDef,pointYR(5)]
[VarDef,pointZR(5)]

[ISlider,"Max Number of Frames",10,1,1,360,"Number of Frames",
	[VarSet,RepeatCount,ZScript:MaxNumberofFrames]
	[ISetMax,zscript:SelectFrame,RepeatCount]
	[if,[MessageYesNo,"Reset All TimeLines?","Change Master Time"],
		[Iset,zscript:Time_1,RepeatCount]
		[Iset,zscript:Time_2,RepeatCount]
		[Iset,zscript:Time_3,RepeatCount]
		[Iset,zscript:Time_4,RepeatCount]
		[Iset,zscript:Time_5,RepeatCount]
	]
,initialyDisabled,[TextCalcWidth,SelectMark12322222233333333]]

[iButton," LoadPointStroke ","Load Last Brush Stroke for Pointer",
	[VarSet,ptr,0]
	[VarSet,PointStroke,[StrokeGetLast]] //get the last drawn stroke
	[VarSet,pnumpts,[StrokeGetInfo,PointStroke,0]]
,0
]
[ISlider,"SDepth",0,1,-4000,4000,"Set Z-Depth of Stroke",
	[VarSet,SZDepth,[IGet,zscript:SDepth]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"EDepth",0,1,-4000,4000,"Set Z-Depth of Stroke",
	[VarSet,EZDepth,[IGet,zscript:EDepth]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISwitch,"Best Render",0,"Select Best Render"]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Object 1 ****************[FontSetColor,160,160,160]
[PD]

[ISwitch,"Sel_1",0,"Select"]
[iSwitch,"TwoPt_1",1,"1 2 Point Interpolate",
	[VarSet,ptr,0]
	[if,[IGet,zscript:Stroke_1],[IToggle,zscript:Stroke_1]]
	[if,[IGet,zscript:Curve_1],[IToggle,zscript:Curve_1]]
	[ISetStatus,zscript:LoadPoint_1,0]
	[ISetStatus,zscript:LoadStroke_1,0]
	[IDisable,zscript:Move_1]
	[VarSet,mode(ptr),0]
]
[iSwitch,"Curve_1",0,"1 Point Spline Interpolate",
	[VarSet,ptr,0]
	[if,[IGet,zscript:TwoPt_1],[IToggle,zscript:TwoPt_1]]
	[if,[IGet,zscript:Stroke_1],[IToggle,zscript:Stroke_1]]
	[ISetStatus,zscript:LoadPoint_1,1]
	[ISetStatus,zscript:LoadStroke_1,0]
	[IEnable,zscript:Move_1]
	[VarSet,mode(ptr),1]
]
[iSwitch,"Stroke_1",0,"Use Brush Stroke for Movement",
	[VarSet,ptr,0]
	[if,[IGet,zscript:TwoPt_1],[IToggle,zscript:TwoPt_1]]
	[if,[IGet,zscript:Curve_1],[IToggle,zscript:Curve_1]]
	[ISetStatus,zscript:LoadStroke_1,1]
	[ISetStatus,zscript:LoadPoint_1,0]
	[IDisable,zscript:Move_1]
	[VarSet,mode(ptr),2]
]
[iSwitch,"Point_1",0,"Point Object at another Object",
	[VarSet,PTarg(0),[IGet,zscript:PT_1]]
	[if,[IGet,zscript:StrkPt_1],[IToggle,zscript:StrkPt_1]]
	[ISetStatus,zscript:LoadStroke_1,0]
]
[ISlider,"PT_1",1,1,1,5,"Which Object to Point At",
	[VarSet,PTarg(0),[IGet,zscript:PT_1]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iSwitch,"StrkPt_1",0,"Point Object at Brush Stroke Data",
	[VarSet,PTarg(0),6]
	[VarSet,ptr,0]
	[if,[IGet,zscript:Point_1],[IToggle,zscript:Point_1]]
	[ISetStatus,zscript:LoadStroke_1,0]
	[IDisable,zscript:Move_1]
]

[iButton," LoadStroke_1 ","Load Last Brush Stroke",
	[VarSet,ptr,0]
	[VarSet,BStroke(ptr),[StrokeGetLast]] //get the last drawn stroke
	[VarSet,bnumpts(ptr),[StrokeGetInfo,BStroke(ptr),0]]
,1
]//End Load Point 1

[iButton," LoadPoint_1 ","Load Current Object Position to use as Spline Point in Curve",
	[VarSet,ptr,0]
	[TransformGet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]//End Load Point 1

[iButton," Move_1 ","Load Current Object Position to LoadPoint_1",
	[VarSet,ptr,0]
	[TransformSet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]
[PD]
[ISlider,"Time_1",10,1,1,360,"Set Object TimeLine",
	[VarSet,TimeLine(0),[IGet,zscript:Time_1]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"Offset_1",0,1,0,360,"Set Object Frame Offset",
	[VarSet,FrameOffset(0),[IGet,zscript:Offset_1]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iButton," GetStart1","Get Starting Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,0]
	[VarSet,which,0]
	[if,[IGet,zscript:Curve_1],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_1,0]
		[IDisable,zscript:Move_1]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_1],
		[varset,dummy,0],
		[IToggle,zscript:Sel_1]
	]
]
[iButton," GetEnd1","Get Ending Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,0]
	[VarSet,which,1]
	[if,[IGet,zscript:Curve_1],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_1,0]
		[IDisable,zscript:Move_1]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_1],
		[varset,dummy,0],
		[IToggle,zscript:Sel_1]
	]
]
[iButton," Recall Start_1","doodah",
	[VarSet,ptr,0]
	[if,[IGet,zscript:Sel_1],
		//If you don't have an object selected pull the recorded object
		// This allows you to select another object and set it to this objects place
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
		]
		[TransformSet,px(ptr),py(ptr),pz(ptr),pxs(ptr),pys(ptr),pzs(ptr),pxr(ptr),pyr(ptr),pzr(ptr)]
	]
]
[iButton," Recall End_1","doodah",
	[VarSet,ptr,0]
	[if,[IGet,zscript:Sel_1],
		//If you don't have an object selected pull the recorded object
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
		]
		[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		[TransformSet,epx(ptr),epy(ptr),epz(ptr),epxs(ptr),epys(ptr),epzs(ptr),epxr(ptr),epyr(ptr),epzr(ptr)]
	]
]
[iButton," Swap_1","Swap Start and End",
	[note,"Swapping.....",,1]
	[VarSet,ptr,0]
	[VarSet,Swaptmp,px(ptr)]
	[VarSet,px(ptr),epx(ptr)]
	[VarSet,epx(ptr),Swaptmp]

	[VarSet,Swaptmp,py(ptr)]
	[VarSet,py(ptr),epy(ptr)]
	[VarSet,epy(ptr),Swaptmp]

	[VarSet,Swaptmp,pz(ptr)]
	[VarSet,pz(ptr),epz(ptr)]
	[VarSet,epz(ptr),Swaptmp]
]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Object 2 ****************[FontSetColor,160,160,160]
[PD]
[ISwitch,"Sel_2",0,"Select"]
[iSwitch,"TwoPt_2",1,"1 2 Point Interpolate",
	[VarSet,ptr,1]
	[if,[IGet,zscript:Stroke_2],[IToggle,zscript:Stroke_2]]
	[if,[IGet,zscript:Curve_2],[IToggle,zscript:Curve_2]]
	[ISetStatus,zscript:LoadPoint_2,0]
	[ISetStatus,zscript:LoadStroke_2,0]
	[IDisable,zscript:Move_2]
	[VarSet,mode(ptr),0]
]
[iSwitch,"Curve_2",0,"1 Point Spline Interpolate",
	[VarSet,ptr,1]
	[if,[IGet,zscript:TwoPt_2],[IToggle,zscript:TwoPt_2]]
	[if,[IGet,zscript:Stroke_2],[IToggle,zscript:Stroke_2]]
	[ISetStatus,zscript:LoadPoint_2,1]
	[ISetStatus,zscript:LoadStroke_2,0]
	[IEnable,zscript:Move_2]
	[VarSet,mode(ptr),1]
]
[iSwitch,"Stroke_2",0,"Use Brush Stroke for Movement",
	[VarSet,ptr,1]
	[if,[IGet,zscript:TwoPt_2],[IToggle,zscript:TwoPt_2]]
	[if,[IGet,zscript:Curve_2],[IToggle,zscript:Curve_2]]
	[ISetStatus,zscript:LoadPoint_2,0]
	[ISetStatus,zscript:LoadStroke_2,1]
	[IDisable,zscript:Move_2]
	[VarSet,mode(ptr),2]
]
[iSwitch,"Point_2",0,"Point Object at another Object",
	[VarSet,PTarg(1),[IGet,zscript:PT_2]]
	[if,[IGet,zscript:StrkPt_2],[IToggle,zscript:StrkPt_2]]
	[ISetStatus,zscript:LoadStroke_2,0]
]
[ISlider,"PT_2",1,1,1,5,"Which Object to Point At",
	[VarSet,PTarg(1),[IGet,zscript:PT_2]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iSwitch,"StrkPt_2",0,"Point Object at Brush Stroke Data",
	[VarSet,PTarg(1),6]
	[VarSet,ptr,1]
	[if,[IGet,zscript:Point_2],[IToggle,zscript:Point_2]]
	[ISetStatus,zscript:LoadStroke_2,0]
	[IDisable,zscript:Move_2]
]
[iButton," LoadStroke_2 ","Load Last Brush Stroke",
	[Note,"Getting Stroke",,1]
	[VarSet,ptr,1]
	[VarSet,BStroke(ptr),[StrokeGetLast]] //get the last drawn stroke
	[VarSet,bnumpts(ptr),[StrokeGetInfo,BStroke(ptr),0]]
,1
]//End Load Point 1
[iButton," LoadPoint_2 ","Load Current Object Position to use as Spline Point in Curve",
	[VarSet,ptr,1]
	[TransformGet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]//End Load Point 2

[iButton," Move_2 ","Load Current Object Position to LoadPoint_1",
	[VarSet,ptr,1]
	[TransformSet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]
[PD]
[ISlider,"Time_2",10,1,1,360,"Set Object TimeLine",
	[VarSet,TimeLine(1),[IGet,zscript:Time_2]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"Offset_2",0,1,0,360,"Set Object Frame Offset",
	[VarSet,FrameOffset(1),[IGet,zscript:Offset_2]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iButton," GetStart2","Get Starting Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,1]
	[VarSet,which,0]
	[if,[IGet,zscript:Curve_2],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_2,0]
		[IDisable,zscript:Move_2]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_2],
		[varset,dummy,0],
		[IToggle,zscript:Sel_2]
	]
]
[iButton," GetEnd2","Get Ending Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,1]
	[VarSet,which,1]
	[if,[IGet,zscript:Curve_2],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_2,0]
		[IDisable,zscript:Move_2]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_2],
		[varset,dummy,0],
		[IToggle,zscript:Sel_2]
	]
]
[iButton," Recall Start_2","doodah",
	[VarSet,ptr,1]
	[if,[IGet,zscript:Sel_2],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
//			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,px(ptr),py(ptr),pz(ptr),pxs(ptr),pys(ptr),pzs(ptr),pxr(ptr),pyr(ptr),pzr(ptr)]
	]
]
[iButton," Recall End_2","doodah",
	[VarSet,ptr,1]
	[if,[IGet,zscript:Sel_2],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,epx(ptr),epy(ptr),epz(ptr),epxs(ptr),epys(ptr),epzs(ptr),epxr(ptr),epyr(ptr),epzr(ptr)]
	]
]
[iButton," Swap_2","Swap Start and End",
	[note,"Swapping.....",,1]
	[VarSet,ptr,1]
	[VarSet,Swaptmp,px(ptr)]
	[VarSet,px(ptr),epx(ptr)]
	[VarSet,epx(ptr),Swaptmp]

	[VarSet,Swaptmp,py(ptr)]
	[VarSet,py(ptr),epy(ptr)]
	[VarSet,epy(ptr),Swaptmp]

	[VarSet,Swaptmp,pz(ptr)]
	[VarSet,pz(ptr),epz(ptr)]
	[VarSet,epz(ptr),Swaptmp]
]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Object 3 ****************[FontSetColor,160,160,160]
[PD]
[ISwitch,"Sel_3",0,"Select"]
[iSwitch,"TwoPt_3",1,"1 2 Point Interpolate",
	[VarSet,ptr,2]
	[if,[IGet,zscript:Stroke_3],[IToggle,zscript:Stroke_3]]
	[if,[IGet,zscript:Curve_3],[IToggle,zscript:Curve_3]]
	[ISetStatus,zscript:LoadPoint_3,0]
	[ISetStatus,zscript:LoadStroke_3,0]
	[IDisable,zscript:Move_3]
	[VarSet,mode(ptr),0]
]
[iSwitch,"Curve_3",0,"1 Point Spline Interpolate",
	[Varset,ptr,2]
	[if,[IGet,zscript:TwoPt_3],[IToggle,zscript:TwoPt_3]]
	[if,[IGet,zscript:Stroke_3],[IToggle,zscript:Stroke_3]]
	[ISetStatus,zscript:LoadPoint_3,1]
	[ISetStatus,zscript:LoadStroke_3,0]
	[IEnable,zscript:Move_3]
	[VarSet,mode(ptr),1]
]
[iSwitch,"Stroke_3",0,"Use Brush Stroke for Movement",
	[VarSet,ptr,2]
	[if,[IGet,zscript:TwoPt_3],[IToggle,zscript:TwoPt_3]]
	[if,[IGet,zscript:Curve_3],[IToggle,zscript:Curve_3]]
	[ISetStatus,zscript:LoadPoint_3,0]
	[ISetStatus,zscript:LoadStroke_3,1]
	[IDisable,zscript:Move_3]
	[VarSet,mode(ptr),2]
]
[iSwitch,"Point_3",0,"Point Object at another Object",
	[VarSet,PTarg(2),[IGet,zscript:PT_3]]
	[if,[IGet,zscript:StrkPt_3],[IToggle,zscript:StrkPt_3]]
	[ISetStatus,zscript:LoadStroke_3,0]
]
[ISlider,"PT_3",1,1,1,5,"Which Object to Point At",
	[VarSet,PTarg(2),[IGet,zscript:PT_3]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iSwitch,"StrkPt_3",0,"Point Object at Brush Stroke Data",
	[VarSet,PTarg(2),6]
	[VarSet,ptr,2]
	[if,[IGet,zscript:Point_3],[IToggle,zscript:Point_3]]
	[ISetStatus,zscript:LoadStroke_3,0]
	[IDisable,zscript:Move_3]
]
[iButton," LoadStroke_3 ","Load Last Brush Stroke",
	[VarSet,ptr,2]
	[VarSet,BStroke(ptr),[StrokeGetLast]] //get the last drawn stroke
	[VarSet,bnumpts(ptr),[StrokeGetInfo,BStroke(ptr),0]]
,1
]//End Load Point 1
[iButton," LoadPoint_3 ","Load Current Object Position to use as Spline Point in Curve",
	[VarSet,ptr,2]
	[TransformGet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]//End Load Point 3

[iButton," Move_3 ","Load Current Object Position to LoadPoint_1",
	[VarSet,ptr,2]
	[TransformSet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]
[PD]
[ISlider,"Time_3",10,1,1,360,"Set Object TimeLine",
	[VarSet,TimeLine(2),[IGet,zscript:Time_3]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"Offset_3",0,1,0,360,"Set Object Frame Offset",
	[VarSet,FrameOffset(2),[IGet,zscript:Offset_3]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iButton," GetStart3","Get Starting Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,2]
	[VarSet,which,0]
	[if,[IGet,zscript:Curve_3],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_3,0]
		[IDisable,zscript:Move_3]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_3],
		[varset,dummy,0],
		[IToggle,zscript:Sel_3]
	]
]
[iButton," GetEnd3","Get Ending Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,2]
	[VarSet,which,1]
	[RoutineCall,GetObjData,ptr,which]
	[if,[IGet,zscript:Curve_3],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_3,0]
		[IDisable,zscript:Move_3]
	]
	[if,[Iget,zscript:Sel_3],
		[varset,dummy,0],
		[IToggle,zscript:Sel_3]
	]
]
[iButton," Recall Start_3","doodah",
	[VarSet,ptr,2]
	[if,[IGet,zscript:Sel_3],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,px(ptr),py(ptr),pz(ptr),pxs(ptr),pys(ptr),pzs(ptr),pxr(ptr),pyr(ptr),pzr(ptr)]
	]
]
[iButton," Recall End_3","doodah",
	[VarSet,ptr,2]
	[if,[IGet,zscript:Sel_3],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,epx(ptr),epy(ptr),epz(ptr),epxs(ptr),epys(ptr),epzs(ptr),epxr(ptr),epyr(ptr),epzr(ptr)]
	]
]
[iButton," Swap_3","Swap Start and End",
	[note,"Swapping.....",,1]
	[VarSet,ptr,2]
	[VarSet,Swaptmp,px(ptr)]
	[VarSet,px(ptr),epx(ptr)]
	[VarSet,epx(ptr),Swaptmp]

	[VarSet,Swaptmp,py(ptr)]
	[VarSet,py(ptr),epy(ptr)]
	[VarSet,epy(ptr),Swaptmp]

	[VarSet,Swaptmp,pz(ptr)]
	[VarSet,pz(ptr),epz(ptr)]
	[VarSet,epz(ptr),Swaptmp]
]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Object 4 ****************[FontSetColor,160,160,160]
[PD]
[ISwitch,"Sel_4",0,"Select"]
[iSwitch,"TwoPt_4",1,"1 2 Point Interpolate",
	[VarSet,ptr,3]
	[if,[IGet,zscript:Stroke_4],[IToggle,zscript:Stroke_4]]
	[if,[IGet,zscript:Curve_4],[IToggle,zscript:Curve_4]]
	[ISetStatus,zscript:LoadPoint_4,0]
	[ISetStatus,zscript:LoadStroke_4,0]
	[IDisable,zscript:Move_4]
	[VarSet,mode(ptr),0]
]
[iSwitch,"Curve_4",0,"1 Point Spline Interpolate",
	[VarSet,ptr,3]
	[if,[IGet,zscript:TwoPt_4],[IToggle,zscript:TwoPt_4]]
	[if,[IGet,zscript:Stroke_4],[IToggle,zscript:Stroke_4]]
	[ISetStatus,zscript:LoadPoint_4,1]
	[ISetStatus,zscript:LoadStroke_4,0]
	[IEnable,zscript:Move_4]
	[VarSet,mode(ptr),1]
]
[iSwitch,"Stroke_4",0,"Use Brush Stroke for Movement",
	[VarSet,ptr,3]
	[if,[IGet,zscript:TwoPt_4],[IToggle,zscript:TwoPt_4]]
	[if,[IGet,zscript:Curve_4],[IToggle,zscript:Curve_4]]
	[ISetStatus,zscript:LoadPoint_4,0]
	[ISetStatus,zscript:LoadStroke_4,1]
	[IDisable,zscript:Move_4]
	[VarSet,mode(ptr),2]
]
[iSwitch,"Point_4",0,"Point Object at another Object",
	[VarSet,PTarg(3),[IGet,zscript:PT_4]]
	[if,[IGet,zscript:StrkPt_4],[IToggle,zscript:StrkPt_4]]
	[ISetStatus,zscript:LoadStroke_4,0]
]
[ISlider,"PT_4",1,1,1,5,"Which Object to Point At",
	[VarSet,PTarg(3),[IGet,zscript:PT_4]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iSwitch,"StrkPt_4",0,"Point Object at Brush Stroke Data",
	[VarSet,PTarg(3),6]
	[VarSet,ptr,3]
	[if,[IGet,zscript:Point_4],[IToggle,zscript:Point_4]]
	[ISetStatus,zscript:LoadStroke_4,0]
	[IDisable,zscript:Move_4]
]
[iButton," LoadStroke_4 ","Load Last Brush Stroke",
	[VarSet,ptr,3]
	[VarSet,BStroke(ptr),[StrokeGetLast]] //get the last drawn stroke
	[VarSet,bnumpts(ptr),[StrokeGetInfo,BStroke(ptr),0]]
,1
]//End Load Point 1
[iButton," LoadPoint_4 ","Load Current Object Position to use as Spline Point in Curve",
	[VarSet,ptr,3]
	[TransformGet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]//End Load Point 4

[iButton," Move_4 ","Load Current Object Position to LoadPoint_4",
	[VarSet,ptr,3]
	[TransformSet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]
[PD]
[ISlider,"Time_4",10,1,1,360,"Set Object TimeLine",
	[VarSet,TimeLine(3),[IGet,zscript:Time_4]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"Offset_4",0,1,0,360,"Set Object Frame Offset",
	[VarSet,FrameOffset(3),[IGet,zscript:Offset_4]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iButton," GetStart4","Get Starting Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,3]
	[VarSet,which,0]
	[if,[IGet,zscript:Curve_4],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_4,0]
		[IDisable,zscript:Move_4]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_4],
		[varset,dummy,0],
		[IToggle,zscript:Sel_4]
	]
]
[iButton," GetEnd4","Get Ending Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,3]
	[VarSet,which,1]
	[if,[IGet,zscript:Curve_4],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_4,0]
		[IDisable,zscript:Move_4]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_4],
		[varset,dummy,0],
		[IToggle,zscript:Sel_4]
	]
]
[iButton," Recall Start_4","doodah",
	[VarSet,ptr,3]
	[if,[IGet,zscript:Sel_4],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,px(ptr),py(ptr),pz(ptr),pxs(ptr),pys(ptr),pzs(ptr),pxr(ptr),pyr(ptr),pzr(ptr)]
	]
]
[iButton," Recall End_4","doodah",
	[VarSet,ptr,3]
	[if,[IGet,zscript:Sel_4],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,epx(ptr),epy(ptr),epz(ptr),epxs(ptr),epys(ptr),epzs(ptr),epxr(ptr),epyr(ptr),epzr(ptr)]
	]
]
[iButton," Swap_4","Swap Start and End",
	[note,"Swapping.....",,1]
	[VarSet,ptr,3]
	[VarSet,Swaptmp,px(ptr)]
	[VarSet,px(ptr),epx(ptr)]
	[VarSet,epx(ptr),Swaptmp]

	[VarSet,Swaptmp,py(ptr)]
	[VarSet,py(ptr),epy(ptr)]
	[VarSet,epy(ptr),Swaptmp]

	[VarSet,Swaptmp,pz(ptr)]
	[VarSet,pz(ptr),epz(ptr)]
	[VarSet,epz(ptr),Swaptmp]
]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Object 5 ****************[FontSetColor,160,160,160]
[PD]
[ISwitch,"Sel_5",0,"Select"]
[iSwitch,"TwoPt_5",1,"1 2 Point Interpolate",
	[VarSet,ptr,4]
	[if,[IGet,zscript:Stroke_5],[IToggle,zscript:Stroke_5]]
	[if,[IGet,zscript:Curve_5],[IToggle,zscript:Curve_5]]
	[ISetStatus,zscript:LoadPoint_5,0]
	[ISetStatus,zscript:LoadStroke_5,0]
	[IDisable,zscript:Move_5]
	[VarSet,mode(ptr),0]
]
[iSwitch,"Curve_5",0,"1 Point Spline Interpolate",
	[VarSet,ptr,4]
	[if,[IGet,zscript:TwoPt_5],[IToggle,zscript:TwoPt_5]]
	[if,[IGet,zscript:Stroke_5],[IToggle,zscript:Stroke_5]]
	[ISetStatus,zscript:LoadPoint_5,1]
	[ISetStatus,zscript:LoadStroke_5,0]
	[IEnable,zscript:Move_5]
	[VarSet,mode(ptr),1]
]
[iSwitch,"Stroke_5",0,"Use Brush Stroke for Movement",
	[VarSet,ptr,4]
	[if,[IGet,zscript:TwoPt_5],[IToggle,zscript:TwoPt_5]]
	[if,[IGet,zscript:Curve_5],[IToggle,zscript:Curve_5]]
	[ISetStatus,zscript:LoadPoint_5,0]
	[ISetStatus,zscript:LoadStroke_5,1]
	[IDisable,zscript:Move_5]
	[VarSet,mode(ptr),2]
]
[iSwitch,"Point_5",0,"Point Object at another Object",
	[VarSet,PTarg(4),[IGet,zscript:PT_5]]
	[if,[IGet,zscript:StrkPt_5],[IToggle,zscript:StrkPt_5]]
	[ISetStatus,zscript:LoadStroke_5,0]
]
[ISlider,"PT_5",1,1,1,5,"Which Object to Point At",
	[VarSet,PTarg(4),[IGet,zscript:PT_5]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iSwitch,"StrkPt_5",0,"Point Object at Brush Stroke Data",
	[VarSet,PTarg(4),6]
	[VarSet,ptr,4]
	[if,[IGet,zscript:Point_5],[IToggle,zscript:Point_5]]
	[ISetStatus,zscript:LoadStroke_5,0]
	[IDisable,zscript:Move_5]
]
[iButton," LoadStroke_5 ","Load Last Brush Stroke",
	[VarSet,ptr,4]
	[VarSet,BStroke(ptr),[StrokeGetLast]] //get the last drawn stroke
	[VarSet,bnumpts(ptr),[StrokeGetInfo,BStroke(ptr),0]]
,1
]//End Load Point 1
[iButton," LoadPoint_5 ","Load Current Object Position to use as Spline Point in Curve",
	[VarSet,ptr,4]
	[TransformGet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]//End Load Point 5

[iButton," Move_5 ","Load Current Object Position to LoadPoint_5",
	[VarSet,ptr,4]
	[TransformSet,pointX(ptr),pointY(ptr),pointZ(ptr),pointXS(ptr),pointYS(ptr),pointZS(ptr),pointXR(ptr),pointYR(ptr),pointZR(ptr)]
,1
]
[PD]
[ISlider,"Time_5",10,1,1,360,"Set Object TimeLine",
	[VarSet,TimeLine(4),[IGet,zscript:Time_5]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[ISlider,"Offset_5",0,1,0,360,"Set Object Frame Offset",
	[VarSet,FrameOffset(4),[IGet,zscript:Offset_5]]
,initialyDisabled,[TextCalcWidth,SelectMark1232]
]
[iButton," GetStart5","Get Starting Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,4]
	[VarSet,which,0]
	[if,[IGet,zscript:Curve_5],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_5,0]
		[IDisable,zscript:Move_5]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_5],
		[varset,dummy,0],
		[IToggle,zscript:Sel_5]
	]
]
[iButton," GetEnd5","Get Ending Parameters",
	[note,"getting info",,1]
	[VarSet,ptr,4]
	[VarSet,which,1]
	[if,[IGet,zscript:Curve_5],
		[VarSet,mode(ptr),1]
	,//else
		[VarSet,mode(ptr),0]
		[ISetStatus,zscript:LoadPoint_5,0]
		[IDisable,zscript:Move_5]
	]
	[RoutineCall,GetObjData,ptr,which]
	[if,[Iget,zscript:Sel_5],
		[varset,dummy,0],
		[IToggle,zscript:Sel_5]
	]
]
[iButton," Recall Start_5","doodah",
	[VarSet,ptr,4]
	[if,[IGet,zscript:Sel_5],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,px(ptr),py(ptr),pz(ptr),pxs(ptr),pys(ptr),pzs(ptr),pxr(ptr),pyr(ptr),pzr(ptr)]
	]
]
[iButton," Recall End_5","doodah",
	[VarSet,ptr,4]
	[if,[IGet,zscript:Sel_5],
		[if,[IGet,Transform:DrawPointer] > 0,
			[ISet,Tool:ItemInfo,type(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
			[IPress,Transform:Move]
			[ISet,Material:ItemInfo,mat(ptr)]
			[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
			[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
		]
		[TransformSet,epx(ptr),epy(ptr),epz(ptr),epxs(ptr),epys(ptr),epzs(ptr),epxr(ptr),epyr(ptr),epzr(ptr)]
	]
]
[iButton," Swap_5","Swap Start and End",
	[note,"Swapping.....",,1]
	[VarSet,ptr,4]
	[VarSet,Swaptmp,px(ptr)]
	[VarSet,px(ptr),epx(ptr)]
	[VarSet,epx(ptr),Swaptmp]

	[VarSet,Swaptmp,py(ptr)]
	[VarSet,py(ptr),epy(ptr)]
	[VarSet,epy(ptr),Swaptmp]

	[VarSet,Swaptmp,pz(ptr)]
	[VarSet,pz(ptr),epz(ptr)]
	[VarSet,epz(ptr),Swaptmp]
]
[PD]
[PaintPageBreak]
[FontSetColor,255,200,0]**************** Render and Export ****************[FontSetColor,160,160,160]
[PD]
[ISwitch,"No Clear           ",0,"Don't Clear Canvas"]

[IButton,"  Preview without saving  ","Preview",
	//clear area make sure current object isn't active
	[IPress,Transform:DrawPointer]
	[VarSet,ptr,0]
	[RoutineCall,ReadSwitches]
	//get starting postitions in case of point
	[VarSet,Swaptmp,0]
	[Loop,5,
		[VarSet,kpx(Swaptmp),px(Swaptmp)]
		[VarSet,kpy(Swaptmp),py(Swaptmp)]
		[VarSet,kpz(Swaptmp),pz(Swaptmp)]
		[VarInc,Swaptmp]
	]
	[if,zscript:noclear,
		[VarSet,Look,1]
	,
		[ipress,Layer:Modifiers:Clear]
		[VarSet,Look,0]
	]
	[VarSet,doSave,0]
	[VarSet,Frame,0]
	[VarSet,Pick,-1]
	[loop,RepeatCount + 1,
		[RoutineCall,DoIt,Frame,Look,Pick]
		[VarInc,Frame]
	]
	//put Frame back to users selection
	[VarSet,Frame,[IGet,zscript:SelectFrame]]
]
[IButton,"  Execute and export images  ","Execute",
	//clear area
	[IPress,Transform:DrawPointer]
	[ipress,Layer:Modifiers:Clear]
	[VarSet,ptr,0]
	[RoutineCall,ReadSwitches]
	//get starting postitions in case of point
	[VarSet,Swaptmp,0]
	[Loop,5,
		[VarSet,kpx(Swaptmp),px(Swaptmp)]
		[VarSet,kpy(Swaptmp),py(Swaptmp)]
		[VarSet,kpz(Swaptmp),pz(Swaptmp)]
		[VarInc,Swaptmp]
	]
	[VarSet,doSave,1]
	[VarSet,Frame,0]
	[VarSet,Look,0]
	[VarSet,Pick,-1]
	//Get Document Ready
	[IPress,document:exportimage]
	[VarSet,name,[FileNameGetLastTyped]]

	[loop,RepeatCount + 1,
		[RoutineCall,DoIt,Frame,Look,Pick]
		[VarInc,Frame]
	]
	//put Frame back to users selection
	[VarSet,Frame,[IGet,zscript:SelectFrame]]
]
[PD]
[iSlider,"SelectFrame",0,1,0,RepeatCount,"Select Frame Index",
	[varSet,Frame,[IGet,zscript:SelectFrame]]
	[Note,Frame,,1]
,0,[TextCalcWidth,SelectMark123456789]]
[iButton,"F+ ","Increment Frame",
	[VarInc,Frame]
	[if, Frame>(RepeatCount),[VarSet,Frame,0]]
	[ISet,zscript:SelectFrame,Frame]
,0,0,.]
[iButton,"F- ","Decrement Frame",
	[VarDec,Frame]
	[if, Frame<0,[VarSet,Frame,RepeatCount]]
	[ISet,zscript:SelectFrame,Frame]
]
[iButton," PlayFrame ","Load Current Object Frame",
	[RoutineCall,ReadSwitches]
	[IPress,Transform:DrawPointer]
	[IPress,Layer:Modifiers:Clear]
	[VarSet,ptr,0]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,-1]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[iButton," ExportFrame ","Export Current Frame",
	//Get Document Ready
	[if,Frame == 0,
		[if,[MessageYesNo,"New Filename?","Frame 0 Initialization"],
			[IPress,document:exportimage]
			[VarSet,name,[FileNameGetLastTyped]]
			[VarSet,#name,[FileNameAdvance,#name,2]] 
		,
			[FileNameSetNext, #name ] 
			[IPress,document:exportimage]
			[VarSet,#name,[FileNameAdvance,#name,2]] 
		]
	,//else
			[FileNameSetNext, #name ] 
			[IPress,document:exportimage]
			[VarSet,#name,[FileNameAdvance,#name,2]] 
	]
[Note,"Saving...",,1]
]
[iButton,"Put_1 ","Put Object on Canvas",
	[RoutineCall,ReadSwitches]
	[VarSet,ptr,0]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,ptr]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[iButton,"Put_2 ","Put Object on Canvas",
	[RoutineCall,ReadSwitches]
	[VarSet,ptr,1]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,ptr]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[iButton,"Put_3 ","Put Object on Canvas",
	[RoutineCall,ReadSwitches]
	[VarSet,ptr,2]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,ptr]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[iButton,"Put_4 ","Put Object on Canvas",
	[RoutineCall,ReadSwitches]
	[VarSet,ptr,3]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,ptr]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[iButton,"Put_5 ","Put Object on Canvas",
	[RoutineCall,ReadSwitches]
	[VarSet,ptr,4]
	[VarSet,Look,1]
	[VarSet,doSave,0]
	[VarSet,Pick,ptr]
	[RoutineCall,DoIt,Frame,Look,Pick]	
]
[PD]

[RoutineDef,DoIt,
		[VarDef,who,0]
		[VarDef,looper,5]
		[VarDef,cnt,0]
		[VarDef,ox,0]
		[VarDef,oy,0]
		[VarDef,oz,0]
		[VarDef,SelFrame,0]
		[VarSet,looper,5]
		
	
		[VarSet,ptr,0]
		//[VarSet,timeincr,1.0/(repeatcount)]
		
		//[VarSet,crecurse,timeincr*IFrame]
		//Only want to draw one of the five
		[if,IPick > -1,
			[VarSet,ptr,IPick]
			[VarSet,looper,1]
		]
		[Loop,looper,
			[VarSet,timeincr,1.0/TimeLine(ptr)]
			//See if object is in timeline yet
			[VarSet,SelFrame,IFrame - FrameOffset(ptr)]
			[if,SelFrame>-1,
			[VarSet,crecurse,timeincr*SelFrame]
			[if,Active(ptr) == 1,
				[ISet,Tool:ItemInfo,type(ptr)]
				[ISet,Material:ItemInfo,mat(ptr)]
				[IColorSet,pr(ptr),pg(ptr),pb(ptr)]
				[CanvasClick,px(ptr),py(ptr),px(ptr)+10,py(ptr)+10]
				[IPress,Transform:Rotate]
				//if not in timeframe anymore use the last postion
//				[if, crecurse > 1.0,[VarSet,crecurse,1.0]]

				[if,mode(ptr) == 0,
					//Position
					[VarSet,resultx(ptr),[Interpolate,crecurse,px(ptr),epx(ptr)]]
					[VarSet,resulty(ptr),[Interpolate,crecurse,py(ptr),epy(ptr)]]
					[VarSet,resultz(ptr),[Interpolate,crecurse,pz(ptr),epz(ptr)]]
					//Scale
					[VarSet,resultxs,[Interpolate,crecurse,pxs(ptr),epxs(ptr)]]
					[VarSet,resultys,[Interpolate,crecurse,pys(ptr),epys(ptr)]]
					[VarSet,resultzs,[Interpolate,crecurse,pzs(ptr),epzs(ptr)]]
					//Rotation
					[VarSet,resultxr,[Interpolate,crecurse,pxr(ptr),epxr(ptr)]]
					[VarSet,resultyr,[Interpolate,crecurse,pyr(ptr),epyr(ptr)]]
					[VarSet,resultzr,[Interpolate,crecurse,pzr(ptr),epzr(ptr)]]
				]
				//curve
				[if,mode(ptr) == 1,	
					//position
					[VarSet,resultx(ptr),[Interpolate,crecurse,px(ptr),pointX(ptr),epx(ptr)]]
					[VarSet,resulty(ptr),[Interpolate,crecurse,py(ptr),pointY(ptr),epy(ptr)]]
					[VarSet,resultz(ptr),[Interpolate,crecurse,pz(ptr),pointZ(ptr),epz(ptr)]]
					//Scale
					[VarSet,resultxs,[Interpolate,crecurse,pxs(ptr),pointXS(ptr),epxs(ptr)]]
					[VarSet,resultys,[Interpolate,crecurse,pys(ptr),pointYS(ptr),epys(ptr)]]
					[VarSet,resultzs,[Interpolate,crecurse,pzs(ptr),pointZS(ptr),epzs(ptr)]]
					//Rotation
					[VarSet,resultxr,[Interpolate,crecurse,pxr(ptr),pointXR(ptr),epxr(ptr)]]
					[VarSet,resultyr,[Interpolate,crecurse,pyr(ptr),pointYR(ptr),epyr(ptr)]]
					[VarSet,resultzr,[Interpolate,crecurse,pzr(ptr),pointZR(ptr),epzr(ptr)]]
				]
				[if,mode(ptr) == 2,
					//Stroke Data
					[VarSet,cnt,crecurse * bnumpts(ptr)]
					[VarSet,resultx(ptr),[StrokeGetInfo,BStroke(ptr),1,cnt]]
					[VarSet,resulty(ptr),[StrokeGetInfo,BStroke(ptr),2,cnt]]
					//get z from original data
					[VarSet,resultz(ptr),[Interpolate,crecurse,pz(ptr),epz(ptr)]]
					//Scale
					[VarSet,resultxs,[Interpolate,crecurse,pxs(ptr),epxs(ptr)]]
					[VarSet,resultys,[Interpolate,crecurse,pys(ptr),epys(ptr)]]
					[VarSet,resultzs,[Interpolate,crecurse,pzs(ptr),epzs(ptr)]]
					//Rotation
					[VarSet,resultxr,[Interpolate,crecurse,pxr(ptr),epxr(ptr)]]
					[VarSet,resultyr,[Interpolate,crecurse,pyr(ptr),epyr(ptr)]]
					[VarSet,resultzr,[Interpolate,crecurse,pzr(ptr),epzr(ptr)]]
				]
				//Check for Pointer Target
				[if,PTarg(ptr) <> 0,
					[if,PTarg(ptr) < 6,
						[VarSet,who,PTarg(ptr)-1]
						//whether the target is ahead or behind makes a difference on where to point
						[if,PTarg(ptr) > ptr,
							[routineCall,PointFromTo,resultx(ptr),resulty(ptr),resultz(ptr),kpx(who),kpy(who),kpz(who),Xangle,Yangle]
						,//else
							[routineCall,PointFromTo,resultx(ptr),resulty(ptr),resultz(ptr),resultx(who),resulty(who),resultz(who),Xangle,Yangle]
						]
						[TransformSet,resultx(ptr),resulty(ptr),resultz(ptr),resultxs,resultys,resultzs,Xangle,Yangle,resultzr]
					,//else
						//Point to Stroke Data
						[if,PTarg(ptr) == 6 && pnumpts > 0,
							[VarSet,cnt,crecurse * pnumpts]
							[VarSet,ox,[StrokeGetInfo,PointStroke,1,cnt]]
							[VarSet,oy,[StrokeGetInfo,PointStroke,2,cnt]]
							[VarSet,oz,[Interpolate,crecurse,SZDepth,EZDepth]]
							[routineCall,PointFromTo,resultx(ptr),resulty(ptr),resultz(ptr),ox,oy,oz,Xangle,Yangle]
							[TransformSet,resultx(ptr),resulty(ptr),resultz(ptr),resultxs,resultys,resultzs,Xangle,Yangle,resultzr]
						]
					]
				,//else
					[TransformSet,resultx(ptr),resulty(ptr),resultz(ptr),resultxs,resultys,resultzs,resultxr,resultyr,resultzr]
				]
				//Save last position
				[VarSet,kpx(ptr),resultx(ptr)]
				[VarSet,kpy(ptr),resulty(ptr)]
				[VarSet,kpz(ptr),resultz(ptr)]
				[IUnpress,Transform:Rotate]
				]//end of selframe
			]
			[VarInc,ptr]
		]
		[VarSet,ptr,0]

		[if,[iget,zscript:bestrender],
			[IPress,Render:BestRenderer]
		]

		[If,doSave==1, 
			[delay,1]
			[FileNameSetNext, #name ] 
			[IPress,document:exportimage]
			[VarSet,#name,[FileNameAdvance,#name,2]] 
		]
		[if,IFrame< RepeatCount,
			[if,ILook == 0,
				[Ipress,Layer:Modifiers:Clear]
			]
		]
		[delay,1]
//***********Parameters**********
,Iframe,ILook,IPick
]


[RoutineDef,GetObjData,
	//Gather pertinent info about the object
	[VarSet,type(iptr),[IGet,TOOL:iteminfo]]
	[VarSet,mat(iptr),[IGet,MATERIAL:iteminfo]]
	[if,iwhich ==0,
		[TransformGet,px(iptr),py(iptr),pz(iptr),pxs(iptr),pys(iptr),pzs(iptr),pxr(iptr),pyr(iptr),pzr(iptr)]
	,//else
		[TransformGet,epx(iptr),epy(iptr),epz(iptr),epxs(iptr),epys(iptr),epzs(iptr),epxr(iptr),epyr(iptr),epzr(iptr)]
	]
	[VarSet,pr(iptr),[IGet,Color:Redcomponent]]
	[VarSet,pg(iptr),[IGet,Color:Greencomponent]]
	[VarSet,pb(iptr),[IGet,Color:Bluecomponent]]


,iptr,iwhich
]
[RoutineDef,ReadSwitches,
	[if,[IGet,zscript:Sel_1],
		[VarSet,Active(0),1]
	,
		[VarSet,Active(0),0]
	]		
	[if,[IGet,zscript:Curve_1],
		[VarSet,Mode(0),1]
	,
		[if,[IGet,zscript:Stroke_1],
			[VarSet,Mode(0),2]
		,
			[VarSet,Mode(0),0]
			[ISetStatus,zscript:LoadPoint_1,0]
			[IDisable,zscript:Move_1]
		]
	]		
	[if,[IGet,zscript:Point_1],
		[VarSet,PTarg(0),[IGet,zscript:PT_1]]
	,//else
		[if,[IGet,zscript:StrkPt_1],
			[VarSet,PTarg(0),6]
		,//else
			[VarSet,PTarg(0),0]
		]
	]

	[if,[IGet,zscript:Sel_2],
		[VarSet,Active(1),1]
	,
		[VarSet,Active(1),0]
	]		
	[if,[IGet,zscript:Curve_2],
		[VarSet,Mode(1),1]
	,
		[if,[IGet,zscript:Stroke_2],
			[VarSet,Mode(1),2]
		,
			[VarSet,Mode(1),0]
			[ISetStatus,zscript:LoadPoint_2,0]
			[IDisable,zscript:Move_2]
		]
	]		
	[if,[IGet,zscript:Point_2],
		[VarSet,PTarg(1),[IGet,zscript:PT_2]]
	,//else
		[if,[IGet,zscript:StrkPt_2],
			[VarSet,PTarg(1),6]
		,//else
			[VarSet,PTarg(1),0]
		]
	]
	[if,[IGet,zscript:Sel_3],
		[VarSet,Active(2),1]
	,
		[VarSet,Active(2),0]
	]		
	[if,[IGet,zscript:Curve_3],
		[VarSet,Mode(2),1]
	,
		[if,[IGet,zscript:Stroke_3],
			[VarSet,Mode(2),2]
		,
			[VarSet,Mode(2),0]
			[ISetStatus,zscript:LoadPoint_3,0]
			[IDisable,zscript:Move_3]
		]
	]		
	[if,[IGet,zscript:Point_3],
		[VarSet,PTarg(2),[IGet,zscript:PT_3]]
	,//else
		[if,[IGet,zscript:StrkPt_3],
			[VarSet,PTarg(2),6]
		,//else
			[VarSet,PTarg(2),0]
		]
	]
	[if,[IGet,zscript:Sel_4],
		[VarSet,Active(3),1]
	,
		[VarSet,Active(3),0]
	]		
	[if,[IGet,zscript:Curve_4],
		[VarSet,Mode(3),1]
	,
		[if,[IGet,zscript:Stroke_4],
			[VarSet,Mode(3),2]
		,
			[VarSet,Mode(3),0]
			[ISetStatus,zscript:LoadPoint_4,0]
			[IDisable,zscript:Move_4]
		]
	]		
	[if,[IGet,zscript:Point_4],
		[VarSet,PTarg(3),[IGet,zscript:PT_4]]
	,//else
		[if,[IGet,zscript:StrkPt_4],
			[VarSet,PTarg(3),6]
		,//else
			[VarSet,PTarg(3),0]
		]
	]
	[if,[IGet,zscript:Sel_5],
		[VarSet,Active(4),1]
	,
		[VarSet,Active(4),0]
	]		
	[if,[IGet,zscript:Curve_5],
		[VarSet,Mode(4),1]
	,
		[if,[IGet,zscript:Stroke_5],
			[VarSet,Mode(4),2]
		,
			[VarSet,Mode(4),0]
			[ISetStatus,zscript:LoadPoint_5,0]
			[IDisable,zscript:Move_5]
		]
	]		
	[if,[IGet,zscript:Point_5],
		[VarSet,PTarg(4),[IGet,zscript:PT_5]]
	,//else
		[if,[IGet,zscript:StrkPt_5],
			[VarSet,PTarg(4),6]
		,//else
			[VarSet,PTarg(4),0]
		]
	]
]
[PD]
[PD]
[FontSetColor,255,200,0]Press Grabline and Click and Drag to make a 3D Line between two points [FontSetColor,160,160,160]
[PD]
[iSlider,"LineDiameter  ",10,1,1,500,"Line Diameter",[varSet,Ldiam,zscript:LineDiameter],0,[TextCalcWidth,XYAngle12345]]

[iButton," MakeALine ","Press to Start then use Mouse and drag from start to end",
	[RoutineCall,Mouselook,Hval1,Vval1,Hval2,Vval2,Clicked]
	//we know we always want to look at first position
	[if,Clicked = 1,
		[RoutineCall,PixolLook,Hval1,Vval1,1,Zval1,tmp,tmp,tmp]
		[RoutineCall,PixolLook,Hval2,Vval2,1,Zval2,tmp,tmp,tmp]
		//figure out the line here now that we have the Z values and positions	
		//place current selection on canvas and go to edit
		[canvasClick,320,258,320,264]
		[iPress,transform:Move]

		//Do the line
		[RoutineCall,MakeLine,Hval1,Hval2,Vval1,Vval2,Zval1,Zval2,0]
		//make scaling right
		[TransformSet,,,,Ldiam,Ldiam]
	]
] // end iButton
[PD]

[PD]
[FontSetColor,255,200,0]Curve Object Interpolates[FontSetColor,160,160,160]
[PD]
//Create a Curve using 2 marks, straight,Spline, or Bezel
[VarDef,ccntr,0]
[VarDef,cptr,1]
[VarDef,Itmp,0]
[VarDef,ICTime,.1]
[VarDef,cmulti1,1]
[VarDef,cmulti2,1]
[VarDef,resultx1,0]
[VarDef,resulty1,0]
[VarDef,resultz1,0]
[VarDef,resultmx,0]
[VarDef,resultmy,0]
[VarDef,resultmz,0]
[VarDef,resultmxs,0]
[VarDef,resultmys,0]
[VarDef,resultmzs,0]
[VarDef,resultmxr,0]
[VarDef,resultmyr,0]
[VarDef,resultmzr,0]
[VarDef,Ipoints,10]
//****************************
// Position Marker Definitions
//****************************
[VarDef,SpointX(2),0]
[VarDef,SpointY(2),0]
[VarDef,SpointZ(2),0]
[VarDef,SpointXS(2),10]
[VarDef,SpointYS(2),10]
[VarDef,SpointZS(2),10]
[VarDef,SpointXR(2),0]
[VarDef,SpointYR(2),0]
[VarDef,SpointZR(2),0]
//****************************
//Keep Points
//****************************
[VarDef,KpointX(2),0]
[VarDef,KpointY(2),0]
[VarDef,KpointZ(2),0]
[VarDef,KpointXS(2),0]
[VarDef,KpointYS(2),0]
[VarDef,KpointZS(2),0]
[VarDef,KpointXR(2),0]
[VarDef,KpointYR(2),0]
[VarDef,KpointZR(2),0]
[VarDef,sel1,1]
[VarDef,sel2,2]
[VarDef,tmp,2]
[VarDef,dangle,2]
[iSlider,"Number of Points ",10,1,0,1000,"Number of Points in Interpolation", 
	[varSet,Ipoints,zscript:NumberofPoints]
	[VarSet,ICtime,1.0/Ipoints]
	
,0,[TextCalcWidth,Distance14537890123]]
[iSlider,"StartMark ",1,1,1,10,"Starting Mark",[varSet,sel1,zscript:StartMark],0,[TextCalcWidth,Distance1453]]
[iSlider,"EndMark ",2,1,1,10,"Ending Mark",[varSet,sel2,zscript:EndMark],0,[TextCalcWidth,Distance1453]]
[PD]
[iSwitch,"2Point",1,"Straight Line Interpolate",
	[if,zscript:2Point,
		[ISetStatus,zscript:LPoint_1,0]
		[ISetStatus,zscript:LPoint_2,0]
		[IDisable,zscript:Mv_1]
		[IDisable,zscript:Mv_2]
	]
	[if,zscript:3Point,
		[IToggle,zscript:3Point]
	]
	[if,zscript:4Point,
		[IToggle,zscript:4Point]
	]
	[if,zscript:1TO2,
		[IToggle,zscript:1TO2]
	]
] 

[iSwitch,"3Point",0,"1 Point Spline Interpolate",
	[if,zscript:3Point,
		[ISetStatus,zscript:LPoint_1,1]
		[ISetStatus,zscript:LPoint_2,0]
		[IEnable,zscript:Mv_1]
		[IDisable,zscript:Mv_2]
	]
	[if,zscript:2Point,
		[IToggle,zscript:2Point]
	]
	[if,zscript:4Point,
		[IToggle,zscript:4Point]
	]
	[if,zscript:1TO2,
		[IToggle,zscript:1TO2]
	]
]

[iSwitch,"4Point",0,"2 Point Bezier Interpolate",
	[if,zscript:4Point,
		[ISetStatus,zscript:LPoint_1,1]
		[ISetStatus,zscript:LPoint_2,1]
		[IEnable,zscript:Mv_1]
		[IEnable,zscript:Mv_2]
	]
	[if,zscript:2Point,
		[IToggle,zscript:2Point]
	]
	[if,zscript:3Point,
		[IToggle,zscript:3Point]
	]
	[if,zscript:1TO2,
		[IToggle,zscript:1TO2]
	]
]

[iSwitch,"1TO2",0,"Make Spline point travel from LoadPt 1 to Loadpt 2",
	[if,zscript:1TO2,
		[ISetStatus,zscript:LPoint_1,1]
		[ISetStatus,zscript:LPoint_2,1]
		[IEnable,zscript:Mv_1]
		[IEnable,zscript:Mv_2]
	]
	[if,zscript:2Point,
		[IToggle,zscript:2Point]
	]
	[if,zscript:3Point,
		[IToggle,zscript:3Point]
	]
	[if,zscript:4Point,
		[IToggle,zscript:4Point]
	]
]
[PD]
[iSwitch,"C-Sizeit",0,"Size to Position"] 
[iSwitch,"C-Snapshot",0,"Perform Snapshot"] 
[iSwitch,"C-Rotateit",0,"Interpolate Rotation"] 
[PD]
[iButton," LPoint_1 ","Load Current Object Position to use as Spline Point in Curve",
[TransformGet,SpointX(0),SpointY(0),SpointZ(0),SpointXS(0),SpointYS(0),SpointZS(0),SpointXR(0),SpointYR(0),SpointZR(0)]
[VarSet,KpointX(0),SpointX(0)]
[VarSet,KpointY(0),SpointY(0)]
[VarSet,KpointZ(0),SpointZ(0)]
[VarSet,KpointXS(0),SpointXS(0)]
[VarSet,KpointYS(0),SpointYS(0)]
[VarSet,KpointZS(0),SpointZS(0)]
[VarSet,KpointXR(0),SpointXR(0)]
[VarSet,KpointYR(0),SpointYR(0)]
[VarSet,KpointZR(0),SpointZR(0)]
,1
]//End Load Point 1

[iButton," Mv_1 ","Load Current Object Position to LoadPoint_1",
	[TransformSet,KpointX(0),KpointY(0),KpointZ(0),KpointXS(0),KpointYS(0),KpointZS(0),KpointXR(0),KpointYR(0),KpointZR(0)],1
]

[iButton," LPoint_2 ","Load Current Object Position to use as Spline Point in Curve",
[TransformGet,SpointX(1),SpointY(1),SpointZ(1),SpointXS(1),SpointYS(1),SpointZS(1),SpointXR(1),SpointYR(1),SpointZR(1)]
[VarSet,KpointX(1),SpointX(1)]
[VarSet,KpointY(1),SpointY(1)]
[VarSet,KpointZ(1),SpointZ(1)]
[VarSet,KpointXS(1),SpointXS(1)]
[VarSet,KpointYS(1),SpointYS(1)]
[VarSet,KpointZS(1),SpointZS(1)]
[VarSet,KpointXR(1),SpointXR(1)]
[VarSet,KpointYR(1),SpointYR(1)]
[VarSet,KpointZR(1),SpointZR(1)]
,1
]//End Load Point 2

[iButton," Mv_2 ","Load Current Object Position to LoadPoint_2",
	[TransformSet,KpointX(1),KpointY(1),KpointZ(1),KpointXS(1),KpointYS(1),KpointZS(1),KpointXR(1),KpointYR(1),KpointZR(1)],1
]

[iButton,"Run Interpolation ","Execute Selected Interpolation",
	//first thing move to first mark and snapshot if required
	[TransformSet,MarkX(sel1),MarkY(sel1),MarkZ(sel1),MarkXS(sel1),MarkYS(sel1),MarkZS(sel1),MarkXR(sel1),MarkYR(sel1),MarkZR(sel1)]
	//go ahead and get all of the current data do only once for recursive
	[TransformGet,IcurrX,IcurrY,IcurrZ,IcurrXS,IcurrYS,IcurrZS,currXR,currYR,currZR]
	// see if any movement of spline point has occurred

	[if,cmulti1<>0,
		[if,zscript:3point,

			//rotate xyAxis
			[VarSet,tmp,dangle*2]
			[VarSet,tmp,180-tmp]
			[VarSet,dangle1,dangle+tmp]
			[if,dangle1<0,
				[VarSet,dangle1,360-ABS(dangle1)]]

			//calc XY angle
			[VarSet,tmp,COS(dangle1)]
			[VarSet,ypt,cmulti1*tmp]
			[VarSet,tmp,SIN(dangle1)]
			[VarSet,xpt,cmulti1*tmp]
		
			[VarSet,SpointX(0),KpointX(0)+xpt]
			[VarSet,SpointY(0),KpointY(0)+ypt]
		]
		[if,zscript:4point,
//Loadpoint1 move
			//rotate xyAxis
			[VarSet,tmp,dangle*2]
			[VarSet,tmp,180-tmp]
			[VarSet,dangle1,dangle+tmp]
			[if,dangle1<0,
				[VarSet,dangle1,360-ABS(dangle1)]]

			//calc XY angle
			[VarSet,tmp,COS(dangle1)]
			[VarSet,ypt,cmulti1*tmp]
			[VarSet,tmp,SIN(dangle1)]
			[VarSet,xpt,cmulti1*tmp]
		
			[VarSet,SpointX(0),KpointX(0)+xpt]
			[VarSet,SpointY(0),KpointY(0)+ypt]


//loadpoint2 move
			//rotate xyAxis
			[VarSet,tmp,zdangle*2]
			[VarSet,tmp,180-tmp]
			[VarSet,dangle1,zdangle+tmp]
			[if,dangle1<0,
				[VarSet,dangle1,360-ABS(dangle1)]]

			//calc XY angle
			[VarSet,tmp,COS(dangle1)]
			[VarSet,ypt,cmulti2*tmp]
			[VarSet,tmp,SIN(dangle1)]
			[VarSet,xpt,cmulti2*tmp]
		
			[VarSet,SpointX(1),KpointX(1)+xpt]
			[VarSet,SpointY(1),KpointY(1)+ypt]

		]
		[if,zscript:1TO2,
//Loadpoint1 move
			//rotate xyAxis
			[VarSet,tmp,dangle*2]
			[VarSet,tmp,180-tmp]
			[VarSet,dangle1,dangle+tmp]
			[if,dangle1<0,
				[VarSet,dangle1,360-ABS(dangle1)]]

			//calc XY angle
			[VarSet,tmp,COS(dangle1)]
			[VarSet,ypt,cmulti1*tmp]
			[VarSet,tmp,SIN(dangle1)]
			[VarSet,xpt,cmulti1*tmp]
		
			[VarSet,SpointX(0),KpointX(0)+xpt]
			[VarSet,SpointY(0),KpointY(0)+ypt]


//loadpoint2 move
			//rotate xyAxis
			[VarSet,tmp,zdangle*2]
			[VarSet,tmp,180-tmp]
			[VarSet,dangle1,zdangle+tmp]
			[if,dangle1<0,
				[VarSet,dangle1,360-ABS(dangle1)]]

			//calc XY angle
			[VarSet,tmp,COS(dangle1)]
			[VarSet,ypt,cmulti2*tmp]
			[VarSet,tmp,SIN(dangle1)]
			[VarSet,xpt,cmulti2*tmp]
		
			[VarSet,SpointX(1),KpointX(1)+xpt]
			[VarSet,SpointY(1),KpointY(1)+ypt]

		]
	]
	[if,[iGet,zscript:C-Snapshot],
		[IPress,Transform:Snapshot]
	]//endif

	//how many time to recurse
	[VarSet,ccntr,1.0/ICTime]
	[VarSet,cptr,1]
	[VarInc,ccntr]
	[Loop,ccntr,
		//interpolate Straight, Spline, or Bezel line
		[VarSet,crecurse,ICTime*cptr]
		[if,zscript:2Point,
			[VarSet,resultx1,[Interpolate,crecurse,MarkX(sel1),MarkX(sel2)]]
			[VarSet,resulty1,[Interpolate,crecurse,MarkY(sel1),MarkY(sel2)]]
			[VarSet,resultz1,[Interpolate,crecurse,MarkZ(sel1),MarkZ(sel2)]]
		]
		[if,zscript:3Point,
			[VarSet,resultx1,[Interpolate,crecurse,MarkX(sel1),SpointX(0),MarkX(sel2)]]
			[VarSet,resulty1,[Interpolate,crecurse,MarkY(sel1),SpointY(0),MarkY(sel2)]]
			[VarSet,resultz1,[Interpolate,crecurse,MarkZ(sel1),SpointZ(0),MarkZ(sel2)]]
		]
		[if,zscript:4Point,
			[VarSet,resultx1,[Interpolate,crecurse,SpointX(0),MarkX(sel1),MarkX(sel2),SpointX(1)]]
			[VarSet,resulty1,[Interpolate,crecurse,SpointY(0),MarkY(sel1),MarkY(sel2),SpointY(1)]]
			[VarSet,resultz1,[Interpolate,crecurse,SpointZ(0),MarkZ(sel1),MarkZ(sel2),SpointZ(1)]]
		]

		[if,zscript:1TO2,
			[VarSet,resultmx,[Interpolate,crecurse,SpointX(0),SpointX(1)]]
			[VarSet,resultmy,[Interpolate,crecurse,SpointY(0),SpointY(1)]]
			[VarSet,resultmz,[Interpolate,crecurse,SpointZ(0),SpointZ(1)]]

			[VarSet,resultx1,[Interpolate,crecurse,MarkX(sel1),resultmx,MarkX(sel2)]]
			[VarSet,resulty1,[Interpolate,crecurse,MarkY(sel1),resultmy,MarkY(sel2)]]
			[VarSet,resultz1,[Interpolate,crecurse,MarkZ(sel1),resultmz,MarkZ(sel2)]]
		]
		//Size Object
		[if,[iGet,zscript:C-Sizeit],
			[if,zscript:2Point,
				[VarSet,resultxs,[Interpolate,crecurse,MarkXS(sel1),MarkXS(sel2)]]
				[VarSet,resultys,[Interpolate,crecurse,MarkYS(sel1),MarkYS(sel2)]]
				[VarSet,resultzs,[Interpolate,crecurse,MarkZS(sel1),MarkZS(sel2)]]
			]
			[if,zscript:3Point,
				[VarSet,resultxs,[Interpolate,crecurse,MarkXS(sel1),SpointXS(0),MarkXS(sel2)]]
				[VarSet,resultys,[Interpolate,crecurse,MarkYS(sel1),SpointYS(0),MarkYS(sel2)]]
				[VarSet,resultzs,[Interpolate,crecurse,MarkZS(sel1),SpointZS(0),MarkZS(sel2)]]
			]
			[if,zscript:4Point,
				[VarSet,resultxs,[Interpolate,crecurse,SpointXS(0),MarkXS(sel1),MarkXS(sel2),SpointXS(1)]]
				[VarSet,resultys,[Interpolate,crecurse,SpointYS(0),MarkYS(sel1),MarkYS(sel2),SpointYS(1)]]
				[VarSet,resultzs,[Interpolate,crecurse,SpointZS(0),MarkZS(sel1),MarkZS(sel2),SpointZS(1)]]
			]

			[if,zscript:1TO2,
				[VarSet,resultmxs,[Interpolate,crecurse,SpointXS(0),SpointXS(1)]]
				[VarSet,resultmys,[Interpolate,crecurse,SpointYS(0),SpointYS(1)]]
				[VarSet,resultmzs,[Interpolate,crecurse,SpointZS(0),SpointZS(1)]]
				
				[VarSet,resultxs,[Interpolate,crecurse,MarkXS(sel1),resultmxs,MarkXS(sel2)]]
				[VarSet,resultys,[Interpolate,crecurse,MarkYS(sel1),resultmys,MarkYS(sel2)]]
				[VarSet,resultzs,[Interpolate,crecurse,MarkZS(sel1),resultmzs,MarkZS(sel2)]]
			]
		,//else
			[VarSet,resultxs,MarkXS(sel1)]
			[VarSet,resultys,MarkYS(sel1)]
			[VarSet,resultzs,MarkZS(sel1)]
		]//Endif

		//Rotate Object
		[if,[iGet,zscript:C-Rotateit],
			[if,zscript:2Point,
				[VarSet,resultxr,[Interpolate,crecurse,MarkXR(sel1),MarkXR(sel2)]]
				[VarSet,resultyr,[Interpolate,crecurse,MarkYR(sel1),MarkYR(sel2)]]
				[VarSet,resultzr,[Interpolate,crecurse,MarkZR(sel1),MarkZR(sel2)]]
			]
			[if,zscript:3Point,
				[VarSet,resultxr,[Interpolate,crecurse,MarkXR(sel1),SpointXR(0),MarkXR(sel2)]]
				[VarSet,resultyr,[Interpolate,crecurse,MarkYR(sel1),SpointYR(0),MarkYR(sel2)]]
				[VarSet,resultzr,[Interpolate,crecurse,MarkZR(sel1),SpointZR(0),MarkZR(sel2)]]
			]
			[if,zscript:4Point,
				[VarSet,resultxr,[Interpolate,crecurse,SpointXR(0),MarkXR(sel1),MarkXR(sel2),SpointXR(1)]]
				[VarSet,resultyr,[Interpolate,crecurse,SpointYR(0),MarkYR(sel1),MarkYR(sel2),SpointYR(1)]]
				[VarSet,resultzr,[Interpolate,crecurse,SpointZR(0),MarkZR(sel1),MarkZR(sel2),SpointZR(1)]]
			]

			[if,zscript:1TO2,
				[VarSet,resultmxr,[Interpolate,crecurse,SpointXR(0),SpointXR(1)]]
				[VarSet,resultmyr,[Interpolate,crecurse,SpointYR(0),SpointYR(1)]]
				[VarSet,resultmzr,[Interpolate,crecurse,SpointZR(0),SpointZR(1)]]

				[VarSet,resultxr,[Interpolate,crecurse,MarkXR(sel1),resultmxr,MarkXR(sel2)]]
				[VarSet,resultyr,[Interpolate,crecurse,MarkYR(sel1),resultmyr,MarkYR(sel2)]]
				[VarSet,resultzr,[Interpolate,crecurse,MarkZR(sel1),resultmzr,MarkZR(sel2)]]
			]
		,//else
			[VarSet,resultxr,MarkXR(sel1)]
			[VarSet,resultyr,MarkYR(sel1)]
			[VarSet,resultzr,MarkZR(sel1)]
		]//Endif
		


		[TransformSet,resultx1,resulty1,resultz1,resultxs,resultys,resultzs,resultxr,resultyr,resultzr]

		[if,[iGet,zscript:C-Snapshot],
			[IPress,Transform:Snapshot]
		]//endif
		[VarInc,cptr]	//add one to ptr
	]//end loop
]//End Curveit_3
[PD]
[PD]
<zscriptinsert,"Widgets_Index_Include.txt">
[PD]
[PD]
[fontSetSizeSmall]\C00e0e0Digit Widget Animate Advanced Revision 3.2, created by Digits\Cc0c0c0


//Common Subroutines
//*********************************************
// Subroutine DepthCalc
// Calculate Size of current object using Zdepth Reference
//*********************************************
[RoutineDef,DepthCalc,
[VarDef,Zfactor,0]
[VarDef,ZMult,10]
[VarDef,TotalArea,0]
[VarDef,Delta]
	[VarSet,Delta,IcurrZ-RefZ]
	[VarSet,Zfactor,ZArea-Delta]
	[if,Zfactor<1,[VarSet,Zfactor,1]]
	[VarSet,TotalArea,ZArea*2]
	[VarSet,ZMult,Zfactor/TotalArea]
	[VarAdd,ZMult,RefMult]
	//apply multiplier to result
	[VarSet,ZMult,ZMult*ZDmult]
	//set back to reference size
	[TransformSet,,,,RefXS,RefYS,RefZS]
	[TransformGet,Delta,Delta,Delta,IcurrXS,IcurrYS,IcurrZS]
	[VarMul,IcurrXS,ZMult]
	[VarMul,IcurrYS,ZMult]
	[VarMul,IcurrZS,ZMult]
	[TransformSet,IcurrX,IcurrY,IcurrZ,IcurrXS,IcurrYS,IcurrZS]
]
//*********************************************
// Subroutine DistCalc
// Calculate Spacing Between 2 Zdepth Referenced Objects
//*********************************************
[RoutineDef,DistCalc,
[VarDef,Zfactor,0]
[VarDef,ZMult,10]
[VarDef,TotalArea,0]
	[VarSet,Delta,IcurrZ-RefZ]
	[VarSet,Zfactor,ZArea-Delta]
	[if,Zfactor<1,[VarSet,Zfactor,1]]
	[VarSet,TotalArea,ZArea*2]
	[VarSet,ZMult,Zfactor/TotalArea]
	[VarAdd,ZMult,RefMult]
	//don't forget to add Z multiplier factor here
	[VarSet,Dmult,ZMult*ZDmult]
]
//*********************************************
// Subroutine GetDistance
// Calculate 2D Distance between 2 Points
//*********************************************
[VarDef,DistToMark,0]
[VarDef,DDistToMark,0]
[RoutineDef,GetDistance,
[VarDef,Xtmp,0]
[VarDef,Ytmp,0]
[VarDef,Xresult,0]
[VarDef,Yresult,0]
[VarDef,tmp,0]
	[VarSet,Xtmp,Ox1-Ex1]
	[VarSet,Ytmp,Oy1-Ey1]
	[VarSet,Xresult,Xtmp*Xtmp]
	[VarSet,Yresult,Ytmp*Ytmp]
	[VarSet,DistToMark,SQRT(Xresult+Yresult)]

//list of inputs
,Ox1,Ex1,Oy1,Ey1
]
//*********************************************
// Subroutine Get3DDistance
// Calculate 3D Distance between 2 Points
//*********************************************
[RoutineDef,Get3DDistance,
[VarDef,Xtmp,0]
[VarDef,Ytmp,0]
[VarDef,Ztmp,0]
[VarDef,Xresult,0]
[VarDef,Yresult,0]
[VarDef,Zresult,0]
[VarDef,tmp,0]
	[VarSet,Xtmp,Ox1-Ex1]
	[VarSet,Ytmp,Oy1-Ey1]
	[VarSet,Ztmp,Oz1-Ez1]
	[VarSet,Xresult,Xtmp^^2]
	[VarSet,Yresult,Ytmp^^2]
	[VarSet,Zresult,Ztmp^^2]
	[VarSet,tmp,Xresult+Yresult+Zresult]
	[VarSet,DDistToMark,SQRT(tmp)]

//list of inputs
,Ox1,Ex1,Oy1,Ey1,Oz1,Ez1
]
//*********************************************
// Subroutine GetAngle
// Get 2D angle between 2 XY Points
//*********************************************
[RoutineDef,GetAngle,
[VarDef,Xtmp,0]
[VarDef,Ytmp,0]
[VarDef,Xresult,0]
[VarDef,Yresult,0]
[VarDef,tmp,0]
	[VarSet,Xtmp,Ox1-Ex1]
	[VarSet,Ytmp,Oy1-Ey1]
	[varSet,tmp,Xtmp/Ytmp]
	[VarSet,dangle,ATAN(tmp)]
	[if,Ytmp<0,
		[VarSet,dangle,dangle + 180]]
	//convert to user
	[VarSet,tmp,360-dangle+180]
	[VarSet,dangle,ABS(tmp)-360]
	[if,dangle<0,
		[VarSet,dangle,360-ABS(dangle)]]
	[VarAdd,Gxyangle,180]
	[if,dangle>360,[VarSet,dangle,dangle-360]]
//list of inputs
,Ox1,Ex1,Oy1,Ey1
]
//*********************************************
// Subroutine GetZAngle
// Get 2D angle between 2 XZ Points
//*********************************************
[RoutineDef,GetZAngle,
[VarDef,Xtmp,0]
[VarDef,Ztmp,0]
[VarDef,Xresult,0]
[VarDef,Zresult,0]
[VarDef,tmp,0]
	[VarSet,Xtmp,Ox1-Ex1]
	[VarSet,Ztmp,Oz1-Ez1]
	[varSet,tmp,Xtmp/Ztmp]
	[VarSet,zdangle,ATAN(tmp)]
	[if,Ztmp<0,
		[VarSet,zdangle,zdangle + 180]]
	//convert to user
	[VarSet,tmp,360-zdangle+180]
	[VarSet,zdangle,ABS(tmp)-360]
	[if,zdangle<0,
		[VarSet,zdangle,360-ABS(zdangle)]]
	[VarAdd,zdangle,180]
	[if,zdangle>360,[VarSet,zdangle,zdangle-360]]
//list of inputs
,Ox1,Ex1,Oz1,Ez1
]
//*****************************
//SuperDooper Point script by Doctor Davey
//*****************************
[routineDef,PointFromTo,
[varSet,deltaX,lnewmX-lcurmX]
[varSet,deltaY,lnewmY-lcurmY]
[varSet,deltaZ,lnewmZ-lcurmZ]
[varSet,Rxz,sqrt((deltaX^^2)+(deltaZ^^2))]
[if,Rxz=0,
	[varSet,lXangle,(abs(deltaY)/deltaY)*-90]
	[varSet,lYangle,0]
, // else Rxz != 0
	[if,deltaZ=0,
		[varSet,deltaZ,-0.01]
	] // end if
	[varSet,lXangle,-atan(deltaY/Rxz)]
	[varSet,lYangle,-atan(deltaX/deltaZ)]
	[if,deltaZ > 0,[varSet,lYangle,-180+lYangle]]
] // end if
,lcurmX,lcurmY,lcurmZ,lnewmX,lnewmY,lnewmZ,lXangle,lYangle
] // end pointfromto routine


[RoutineDef,MakeLine,
	[RoutineCall,Get3DDistance,mlx,mrx,mly,mry,mlz,mrz]

	[VarSet,middlex,[Interpolate,.5,mlx,mrx]]
	[VarSet,middley,[Interpolate,.5,mly,mry]]
	[VarSet,middlez,[Interpolate,.5,mlz,mrz]]

	[TransformSet,middlex,middley,middlez,,,DDistToMark*.5]
	//let us now rotate it to the mark
	[routineCall,PointFromTo,middlex,middley,middlez,mrx,mry,mrz,Xangle,Yangle]
	[transformSet,,,,,,,Xangle,Yangle,mez]

,mlx,mrx,mly,mry,mlz,mrz,mez]

[RoutineDef,GetPosition,
	//rotate xyAxis and get x&ypt
	[VarSet,tmp,ang*2]
	[VarSet,tmp,180-tmp]
	[VarSet,ang1,ang+tmp]
	[if,ang1<0,
		[VarSet,ang1,360-ABS(ang1)]]
	//calc XY angle
	[VarSet,tmp,COS(ang1)]
	[VarSet,ypt,DIST1*tmp]
	[VarSet,tmp,SIN(ang1)]
	[VarSet,xpt,DIST1*tmp]

	//rotate xzAxis and get zpt
	[VarSet,tmp,zang*2]
	[VarSet,tmp,180-tmp]
	[VarSet,ang1,zang+tmp]
	[if,ang1<0,
		[VarSet,ang1,360-ABS(ang1)]]
	//calc XY angle
	[VarSet,tmp,SIN(ang1)]
	[VarSet,zpt,DIST1*tmp]

	,ang,zang,DIST1
]
//******************************
//Mouselook
// Routine to return Mouse Position values
//******************************
[RoutineDef,Mouselook,
	[loop,999999, // "endless" loop, user keeps clicking

		[loop,999999, // wait for mouse click
			[if,[mouseLbutton] = 1,
				[varSet,IHval1,[mouseHpos]]
				[varSet,IVval1,[mouseVpos]]
				[loopexit]
			] // end if
		] // end wait for mouse click loop

		[loop,999999, // now wait for mouse up
			[if,[mouseLbutton] = 0,
				[varSet,IHval2,[mouseHpos]]
				[varSet,IVval2,[mouseVpos]]
				[loopexit]
			] // end if
		] // end wait for mouse up loop

		[if,(IVval1 > 0), //(on the canvas)
			[if,(abs(IHval2-IHval1)<3) && (abs(IVval2-IVval1)<3),
				// single click
				[VarSet,IClicked,0]
			, // else = click + drag
				[VarSet,IClicked,1]
			] // end if click or drag
			[loopExit]
		] // end if (top button clicked/not clicked)
		[loop,99999, // ensure mouse button is up before continuing
			[if,[mouseLbutton] = 0,
				[loopExit]
			] // end if
		] // end ensure loop
	] // end "endless" loop
//parameters
,IHval1,IVval1,IHval2,IVval2,IClicked
]//end Mouselook
//******************************
//Pixollook
// Routine to return All Pixol values
//******************************
[RoutineDef,PixolLook,
	[if,itype = 0,	//return color information
		[VarSet,val1,[PixolPick,0,ihval,ivval]]
		[VarSet,val2,[PixolPick,2,ihval,ivval]]
		[VarSet,val3,[PixolPick,3,ihval,ivval]]
		[VarSet,val4,[PixolPick,4,ihval,ivval]]
	,//else
		[if,itype = 1,	//Return Zdepth and material
			[VarSet,val1,[PixolPick,1,ihval,ivval]]
			[VarSet,val2,[PixolPick,5,ihval,ivval]]
		,//else
			[if,itype = 2,	//Return Normals
				[VarSet,val1,[PixolPick,6,ihval,ivval]]
				[VarSet,val2,[PixolPick,7,ihval,ivval]]
				[VarSet,val3,[PixolPick,8,ihval,ivval]]
			]
		]
	]
//Parameters here
,ihval,ivval,itype,val1,val2,val3,val4
]
//*************************
//Find the max of three numbers
//*************************
[RoutineDef,FindMax,
	[varDef,ts1,0]
	[varDef,ts2,0]
	[VarSet,ismax,0]
	[VarSet,ts1,Max(abs(md1),abs(md2))]
	[VarSet,ts2,Max(abs(md1),abs(md3))]
	[VarSet,ismax,Max(ts1,ts2)]
	[VarSet,ismax,abs(ismax)]
,md1,md2,md3,ismax
]
